﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.Data;

namespace Controllers
{
    public class FacturacionController
    {
        public static void RegistrarFacturacion(int clientId, string date_from, string date_to, string total, int facturaId)
        {
            var sql = "";
            if (facturaId == 0)
            {
                sql = "INSERT INTO SUPERACIDOS.Factura (Factura_Fecha_Inicio, Factura_Fecha_Fin, Factura_ClienteId, Factura_Importe) "
                      + " VALUES ('{0}','{1}',{2},'{3}')";
                sql = string.Format(sql, date_from, date_to, clientId, total);
            }
            else
            {
                sql = "UPDATE SUPERACIDOS.Factura set Factura_Fecha_Inicio = '{0}' , Factura_Fecha_Fin = '{1}', Factura_ClienteId = {2}, Factura_Importe = '{3}' " +
                        "WHERE Factura_Id = {4}";

                sql = string.Format(sql, date_from, date_to, clientId, total, facturaId);
            }


            ConexionBaseDeDatos.Guardar(sql, CommandType.Text);
        }

        public static int ObtenerFacturaAnterior(int clientId, string date_from)
        {
            var sql = "Select Factura_Id, Factura_Importe From Superacidos.Factura" +
                    " WHERE Factura_ClienteId = " + clientId +
                    " AND Factura_Fecha_Inicio = '" + date_from + "'";
            var reader = ConexionBaseDeDatos.GetData(sql, CommandType.Text);
            if (reader.HasRows)
            {
                reader.Read();
                if (reader["Factura_Id"] != DBNull.Value)
                {
                    return ((int)reader["Factura_Id"]);
                }
                else
                {
                    return 0;
                }
            }
            else
            {
                return 0; 
            }
        }

        public static decimal ObtenerFacturacionTotal(int clientId, string date_from, string date_to)
        {
            var sql = "Select sum(Viaje_Importe) [Total]  From Superacidos.Viaje" + 
                     " WHERE Viaje_ClienteId = " + clientId + 
                     " AND Viaje_Fecha between '" + date_from + "' AND '" + date_to + "'";
            var reader = ConexionBaseDeDatos.GetData(sql, CommandType.Text);
            reader.Read();
            if (reader["Total"] != DBNull.Value)
            {
                return ((decimal)reader["Total"]);
            }
            else
            {
                return 0;
            }
           
        }
        /*
         * SELECT SUPERACIDOS.Viaje., SUPERACIDOS.Viaje.Viaje_ClienteId, SUPERACIDOS.Viaje., 
                      SUPERACIDOS.Viaje.,
			, 
FROM         SUPERACIDOS.Viaje INNER JOIN
                      SUPERACIDOS.Turno ON SUPERACIDOS.Turno.Turno_Id = SUPERACIDOS.Viaje.Viaje_TurnoId
					join superacidos.chofer on chofer_id = SUPERACIDOS.Viaje.viaje_choferId
					join superacidos.auto on auto_id = superacidos.viaje.viaje_autoid
WHERE     (SUPERACIDOS.Viaje.Viaje_ClienteId IS NOT NULL)
         * */
        public static List<Factura> ObtenerTodos(int clientId, string date_from, string date_to, int pagina, int cantidadRegistros)
        {
            var list = new List<Factura>();
            string where = " Viaje_ClienteId = " + clientId + 
            " AND Viaje_Fecha between '" + date_from + "' AND '" + date_to + "'";

            var sql = "Select TOP " + cantidadRegistros + " Viaje_Id, Viaje_Fecha, Viaje_Importe [Recaudacion], " +
                        " Chofer_dni, Auto_patente " + 
                        " From Superacidos.Viaje " + 
                        " JOIN Superacidos.Chofer on Chofer_id = Viaje_choferId " +
                        " JOIN Superacidos.Auto on Auto_id = Viaje_autoid ";

            if (pagina > 1)
            {
                int limiteAnterior = (pagina - 1) * cantidadRegistros;

                where += " AND Viaje_Id NOT IN " + "(Select TOP " + limiteAnterior +
                         " Viaje_Id from Superacidos.Viaje WHERE "+where+"  ORDER BY Viaje_Fecha) ";
            }

            sql += " WHERE " + where;
            sql += " ORDER BY Viaje_Fecha";

            var reader = ConexionBaseDeDatos.GetData(sql, CommandType.Text);

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                   list.Add(ObtenerObjeto(reader));
                }
            }

            return list;
        }

        public static Factura ObtenerObjeto(OleDbDataReader reader)
        {
            var factura = new Factura();

            if (reader["Viaje_Id"] != DBNull.Value)
                factura.Viaje_Id = (int)reader["Viaje_Id"];
            if (reader["Viaje_Fecha"] != DBNull.Value)
                factura.Viaje_Fecha = (DateTime)reader["Viaje_Fecha"];
            if (reader["Recaudacion"] != DBNull.Value)
                factura.Viaje_Recaudacion = (decimal)reader["Recaudacion"];
            if (reader["Chofer_DNI"] != DBNull.Value)
                factura.Viaje_Chofer_DNI = (decimal)reader["Chofer_DNI"];
            if (reader["Auto_Patente"] != DBNull.Value)
                factura.Viaje_Auto_Patente = (string)reader["Auto_Patente"];


            return factura;
        }

        public static int ObtenerCantidad(int clientId, string date_from, string date_to)
        {
            var sql = "Select count(*) as Cantidad From Superacidos.Viaje" +
            " WHERE Viaje_ClienteId = " + clientId + 
            " AND Viaje_Fecha between '" + date_from + "' AND '" + date_to + "'";
           
            var cantidad = 0;
            var reader = ConexionBaseDeDatos.GetData(sql, CommandType.Text);

            if (reader.HasRows)
            {
                reader.Read();
                if (reader["Cantidad"] != DBNull.Value)
                    cantidad = (int)reader["Cantidad"];

            }

            return cantidad;
        }
   
    }
}
